#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>

#define NUM 10
const char* myfile = "/home/dgz/linux/2-27/lesson19/mycmd";
 
    // 为什么我要创建子进程？
    // 为了不影响父进程
    // 我们想让父进程聚焦在读取数据，解析数据，指派进程执行代码的功能！
    // 如果不创建，那么我们替换的进程只能是父进程，如果创建了，替换的进程就是子进程，而不影响父进程（为什么？）
    // 因为进程具有独立性
int main(int argc, char* argv[], char* env[])
{
    //while(1)
    //{
        //1. 显示一个提示行： root@localhost# 
        //2. 获取用户输入的字符串，fgets，scanf。 -> ls -a -l
        //3. 对字符串进行解析
        //4. 下面的代码
    char* const _env[NUM] = {
        "fuckall=111222333444555",
        NULL 
    };
    pid_t id = fork();
    if(id == 0)
    {
        // 子进程
        printf("子进程开始运行，pid:%d\n",getpid());
        sleep(3);
        char* const _argv[NUM] = {
            (char*)"ls", 
            (char*)"-a",
            (char*)"-l",
            NULL 
        };
            
       // execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
         execle(myfile, "mycmd", "-a", NULL,_env);
       // execle(myfile, "mycmd", "-a", NULL, env);
       // execl(myfile, "mycmd", "-b", NULL);
       // execv("/usr/bin/ls", _argv);
       // execlp("ls", "ls", "-a", "-l", NULL);
       // execlp("python", "python", "test.py", NULL);
       // execvp("ls", _argv);
        exit(1);
    }
    else 
    {

        printf("父进程开始运行，pid:%d\n",getpid());
        int status = 0;
        pid_t res = waitpid(-1,&status,0); // 阻塞等待
        if(res > 0)
        {
            printf("等待成功，退出码:%d\n",WEXITSTATUS(status));
        }

    }
 //} end while(1)


    return 0;
}
